package repository

import (
	"gitee.com/duan_shengjie/user/domain/model"
	"github.com/jinzhu/gorm"
)

type IUserRepository interface {
	// 初始化数据表
	InitTable() error
	// 根据用户名查找用户信息
	FindUserByName(string) (*model.User, error)
	// 根据用户Id查找用户信息
	FindUserByID(int64) (*model.User, error)
	// 创建用户
	CreateUser(*model.User) (int64, error)
	// 根据用户id删除用户
	DeleteByID(int64) error
	// 更新用户信息
	UpdateUser(user *model.User) error
	// 获取所有用户
	FindAll() ([]*model.User, error)
}

type UserRepository struct {
	mysqlDb *gorm.DB
}

func NewUserRepository(db *gorm.DB) IUserRepository {
	return &UserRepository{mysqlDb: db}
}

// 初始化数据表
func (u *UserRepository) InitTable() error {
	return u.mysqlDb.CreateTable(&model.User{}).Error
}

// 根据用户名查找用户信息
func (u *UserRepository) FindUserByName(name string) (user *model.User, err error) {
	user = new(model.User)
	err = u.mysqlDb.Where("name = ?", name).Find(user).Error
	return
}

// 根据用户Id查找用户信息
func (u *UserRepository) FindUserByID(Id int64) (user *model.User, err error) {
	user = new(model.User)
	err = u.mysqlDb.First(user, Id).Error
	return
}

// 创建用户
func (u *UserRepository) CreateUser(user *model.User) (id int64, err error) {
	id = user.ID
	err = u.mysqlDb.Create(user).Error
	return
}

// 删除用户
func (u *UserRepository) DeleteByID(Id int64) (err error) {
	err = u.mysqlDb.Where("id = ?", Id).Delete(&model.User{}).Error
	return
}

// 更新用户信息
func (u *UserRepository) UpdateUser(user *model.User) (err error) {
	err = u.mysqlDb.Model(user).Select("user_name", "first_name", "hash_password").Updates(user).Error
	return
}

// 获取所有用户
func (u *UserRepository) FindAll() (allUser []*model.User, err error) {
	err = u.mysqlDb.Find(&allUser).Error
	return
}
